package com.xyz;

public class Main {

    public static void main(String[] args) {
        // 每一对象或类或接口，都可以获取到其对应的 Class 类的对象，存储该 对象或类或接口 的类信息
        // 获取方式: 对象.getClass()  类名、接口名 .class

        //字符串
        printClassInfo("".getClass());
        //系统类库中的运行类 Runnable
        printClassInfo(Runnable.class);
        //月份类
        printClassInfo(java.time.Month.class);
        //字符串数组
        printClassInfo(String[].class);
        //数值类型
        printClassInfo(int.class);
        // Class 类型
        printClassInfo(Class.class);
    }

    // 自定义静态方法，用来打印对象的类信息
    // 参数是 Class 类对象，这种对象专门用来存储任意对象的类信息
    static void printClassInfo(Class cls) {
        System.out.println();
        System.out.println("#########################################");
        // 通过 Class 对象的 getName 方法，获取完整的类名
        System.out.println("完整类名: " + cls.getName());
        // 通过 Class 对象的 getSimpleName 方法，获取类名
        System.out.println("简单类名: " + cls.getSimpleName());
        // 通过 Class 对象的 getPackage 方法，获取包信息
        if (cls.getPackage() != null) {
            System.out.println("包名: " + cls.getPackage().getName());
        }
        // 通过 Class 对象的 isInterface 方法，判断当前对象是否是接口
        System.out.println("是否是接口: " + cls.isInterface());
        // 通过 Class 对象的 isEnum 方法，判断当前对象是否是枚举
        System.out.println("是否是枚举： " + cls.isEnum());
        // 通过 Class 对象的 isArray 方法，判断当前对象是否是数组
        System.out.println("是否是数组: " + cls.isArray());
        // 通过 Class 对象的 isPrimitive 方法，判断当前对象是否是基本数值类型（int /float 等）
        System.out.println("是否是基础类型: " + cls.isPrimitive());
        System.out.println("#########################################");
        System.out.println();
    }
}
